package com.pubinfo.passbook.common.model.http.engine;

import com.pubinfo.passbook.common.model.dto.engine.EngineDescription;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;

/**
 * @author zhouch
 * @date 2021/12/13 9:28
 */
@ApiModel("参数体")
@Data
public class ComputeParam {

    /**
     * 参数名称 (用于对应每个计算单元的参数名称插槽)
     * 在计算单元运行时插槽中的参数处理器会自动工作
     */
    @ApiModelProperty("参数名称")
    @NotBlank(message = "参数名称不能为空")
    private String name;

    /**
     * 参数值 (临时变量使用)
     */
    @ApiModelProperty("参数值 (仅限参数类型为临时变量时)")
    private BigDecimal value;

    /**
     * 参数类型 (属于哪种参数), 在工厂时初始化用
     * <p>
     * {@link com.pubinfo.passbook.engine.constants.ComputeParamType}
     */
    @ApiModelProperty(EngineDescription.COMPUTE_PARAM_TYPE)
    @NotBlank(message = "参数类型不能为空")
    private String type;

    /**
     * 计算结果类型 （在计算链组装时后检查每个计算单元参数插槽的类型是否对应）
     * <p>
     * {@link com.pubinfo.passbook.engine.constants.ComputeResultType}
     */
    @ApiModelProperty(EngineDescription.COMPUTE_RESULT_TYPE)
    @NotBlank(message = "返回值类型不能为空")
    private String resultType;

    /**
     * 参数表ID (可能是变量表,公式表或者常量表) 根据参数类型判断
     * 在最后实际计算时候从数据库中取得标识符实例化对应参数处理器。
     */
    @ApiModelProperty("参数ID (变量,公式,常量)")
    private Integer paramId;
}
